package com.lee.rabbitmq;

import com.lee.rabbitmq.util.RabbitMqUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

import java.io.IOException;

/**
 * 不使用交换机发送消息
 * @author Lee
 * @createDate 2021/12/11 17:45
 */
public class Send {
    public static void main(String[] args) {
        //定义连接
        Connection connection = null;
        //定义通道
        Channel channel = null;
        try {
            //获取连接
            connection = RabbitMqUtil.getConnection();
            channel = connection.createChannel();

            /**
             * 声明一个队列,
             * 参数1  为队列名取值任意
             * 参数2  为是否为持久化的队列
             * 参数3  为是否排外,如果排外则这个队列只允许一个消费者监听
             * 参数4  是否自动删除队列，如果为true则表示当队列中没有消息，也没有消费者链接时就会自动删除这个队列
             * 参数5  为队列的一些属性设置通常为null即可
             * 注意:
             *  1、声明队列时，这个队列名称如果已经存在则放弃声明，如果队列不存在则会声明一个新的队列
             *  2、队列名可以取值任意,但是要与消息接收时完全一致
             *  3、如果RabbitMQ中已存在'myQueue'队列，那么以下代码可省略，若RabbitMQ中不存在此队列，省略会报错。
             */
            channel.queueDeclare("myQueue",true,false,false,null);

            String message = "RabbitMQ测试消息";
            /**
             * 发送消息到MQ
             * 参数1  为交换机名称这里为空字符串表示不使用交换机
             * 参数2  为队列名或RoutingKey，当指定了交换机名称以后这个这个值就是RoutingKey
             * 参数3  为消息属性信息通常空即可
             * 参数4  为具体的消息数据的字节数组
             */
            channel.basicPublish("","myQueue",null,message.getBytes("utf-8"));
            System.out.println("消息发送成功");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            RabbitMqUtil.close(connection,channel);
        }
    }
}
